#!/usr/bin/env perl

use strict;
use warnings;

use FindBin;
BEGIN { unshift @INC, "$FindBin::Bin/../lib" }

use Getopt::Long qw(GetOptions :config no_auto_abbrev no_ignore_case);

GetOptions
  'h|help'     => \my $help,
  'l|listen=s' => \my @listen,
  'm|mode=s'   => sub { $ENV{MOJO_MODE} = $_[1] },
  'v|verbose'  => sub { $ENV{MORBO_VERBOSE} = 1 },
  'w|watch=s'  => \my @watch;

die <<EOF if $help || !(my $app = shift);
usage: $0 [OPTIONS] [APPLICATION]

  morbo script/myapp
  morbo myapp.pl
  morbo -m production -l https://*:443
  morbo -w /usr/local/lib -w public myapp.pl

These options are available:
  -h, --help                     Show this message.
  -l, --listen <location>        Set one or more locations you want to listen
                                 on, defaults to the value of MOJO_LISTEN or
                                 "http://*:3000".
  -m, --mode <name>              Operating mode for your application, defaults
                                 to the value of MOJO_MODE/PLACK_ENV or
                                 "development".
  -v, --verbose                  Print details about what files changed to
                                 STDOUT.
  -w, --watch <directory/file>   Set one or more directories and files to
                                 watch for changes, defaults to the
                                 application script as well as the "lib" and
                                 "templates" directories in the current
                                 working directory.
EOF

$ENV{MOJO_LISTEN} = join(',', @listen) if @listen;
require Mojo::Server::Morbo;
my $morbo = Mojo::Server::Morbo->new;
$morbo->watch(\@watch) if @watch;
$morbo->run($app);

=encoding utf8

=head1 NAME

morbo - Morbo HTTP and WebSocket development server

=head1 SYNOPSIS

  $ morbo --help
  $ morbo myapp.pl

=head1 DESCRIPTION

Start L<Mojolicious> and L<Mojolicious::Lite> applications with the
L<Mojo::Server::Morbo> web server.

=head1 SEE ALSO

L<Mojolicious>, L<Mojolicious::Guides>, L<http://mojolicio.us>.

=cut
